package base.utils;

import java.lang.management.ManagementFactory;
import java.lang.management.ThreadMXBean;

import org.apache.log4j.Logger;

/**
 * 打印内存使用情况
 * @author Administrator
 *
 */
public class MemoryUtil {
	
	/**
	 * 用于控制是否输出内存信息
	 */
	private static boolean	isPrintMemoryInfo	= true;
	
	/**
	 * 打印当前内存信息 打印格式：
	 * <p>
	 * --------------------------------infoTag : 内存状态----------------------------------- <br>
	 * 当前已用内存:331.2567(M) <br>
	 * 当前可用内存:8.9147(M) <br>
	 * 当前分配内存:340.1714(M) <br>
	 * 最大分配内存:1638.3994(M)
	 * </p>
	 * @param o 类名
	 * @param infoTag 当前内存信息标识 此信息将输出，用于判断内存信息是哪个地方输出的
	 */
	public static String PrintMemoryInfo(Object o,String infoTag) {
		String str  ="";
		if (isPrintMemoryInfo)
		{
			double mb = 1024 * 1024;
			Runtime runtime = Runtime.getRuntime();
			
			java.text.DecimalFormat df = new java.text.DecimalFormat("#.####");
			ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
			long currentCpuTime = threadMXBean.getCurrentThreadCpuTime(); 
			
			String msg =  "\r\n******" +o+" >> "+ infoTag + " : 内存状态******\r\n";
			msg += "最大分配内存:" + df.format(runtime.maxMemory() / mb) + "(M)\r\n";
			msg += "当前分配内存:" + df.format(runtime.totalMemory() / mb) + "(M)\r\n";
			msg += "当前已用内存:" + df.format((runtime.totalMemory() - runtime.freeMemory()) / mb) + "(M)\r\n";
			msg += "当前可用内存:" + df.format(runtime.freeMemory() / mb) + "(M)\r\n";
			msg += "cpu使用时间为:"+currentCpuTime+"\r\n";
			msg += "******" + infoTag + " : 内存状态******\r\n";
			
			str = msg;
		}
		return str;
	}
	

}